using System;
using System.Collections.Generic;
using System.Text;
using JobShopModel.Model.FactoryLvl;
using JobShopModel.Model.JobLvl;

namespace JobShopModel.Model.Station
{
    /// <summary>
    /// Interface Station:
    /// Represent any type of station
    /// </summary>
    public interface IStations
    {

        #region Properties

        /// <summary>
        /// Property:
        /// Total time of operation for a station
        /// </summary>
        Time TotalOperationTime
        {
            get;
        }

        /// <summary>
        /// Property:
        /// Total time waiting for an operation (iddle)
        /// </summary>
        Time TotalIddleTime
        {
            get;
        }

        /// <summary>
        /// Property:
        /// Total time waiting for a transporter after an operation have been done
        /// </summary>
        Time TotalBlockedTime
        {
            get;
        }

        /// <summary>
        /// Property:
        /// State of the Station at a given moment
        /// <seealso cref="StationsStates"/>
        /// </summary>
        StationsStates State
        {
            get;
            
        }

        /// <summary>
        /// Property;
        /// Name of the station
        /// Must be set by the constructor, is read only
        /// </summary>
        StationsName Name
        {
            get;
        }

        #endregion Properties

    }

    /// <summary>
    /// Names of all the stations
    /// </summary>
    public enum StationsName
    {
        /// <summary>
        /// 
        /// </summary>
        STATION1,
        /// <summary>
        /// 
        /// </summary>
        STATION2,
        /// <summary>
        /// 
        /// </summary>
        STATION3,
        /// <summary>
        /// 
        /// </summary>
        STATION4,
        /// <summary>
        /// 
        /// </summary>
        STATION5,
        /// <summary>
        /// 
        /// </summary>
        IOSTATION
    }

    /// <summary>
    /// States of a Station,
    /// Is depending on the underlying states of machines composing a station.
    /// </summary>
    public enum StationsStates
    {
        /// <summary>
        /// 
        /// </summary>
        AVAILABLE,
        /// <summary>
        /// 
        /// </summary>
        BUSY
    }

}
